/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.criar;

import br.com.foxinline.modelo.Curso;
import br.com.foxinline.modelo.Grupo;
import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.servico.CursoServico;
import br.com.foxinline.servico.GrupoServico;
import br.com.foxinline.servico.UsuarioServico;
import br.com.foxinline.utilitario.Msg;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author ely
 */
@ViewScoped
@ManagedBean
public class ManagerCriarUsuario implements Serializable {

    @EJB
    UsuarioServico usuarioServico;
    @EJB
    GrupoServico grupoServico;
    @EJB
    CursoServico cursoServico;
    private Usuario usuario;
    private String senha;
    private Curso curso;
    private List<Curso> cursos;
    private List<Grupo> grupos;
    private List<Grupo> grupoSelecionado;
    private Boolean login;

    @PostConstruct
    public void init() {
        usuario = new Usuario();
        curso = new Curso();
        cursos = cursoServico.pesquisarTodos();
        grupos = grupoServico.pesquisarTodos();
        grupoSelecionado = new ArrayList<Grupo>();
        login = Boolean.FALSE;
    }

    public void existLogin() {
        Usuario u = usuarioServico.existLogin(usuario.getLogin());
        if (u != null) {
            login = Boolean.TRUE;
        } else {
            login = Boolean.FALSE;
        }
    }

    public void salvar() {
        Usuario u = usuarioServico.existLogin(usuario.getLogin());
        if (u != null) {
            Msg.messagemWarn("Login já existe, informe um novo login");
        } else {
            try {
                if (usuarioServico.usuarioObrigatorio(usuario)) {
                    if (usuarioServico.senhaObrigatorio(usuario)) {
                        if (usuarioServico.verificaSenha(senha, usuario)) {
                            if (!grupoSelecionado.isEmpty()) {
                                usuario.setCurso(curso);
                                usuario.setSenha(Usuario.encryptPassword(usuario.getSenha()));
                                usuario.setGrupos(grupoSelecionado);
                                usuario.setAtivo(Boolean.TRUE);
                                usuarioServico.salvar(usuario);
                                Msg.messagemInfo(Msg.SuccessFull);
                                init();
                            } else {
                                Msg.messagemWarn("Selecione o nível de acesso ");
                            }
                        } else {
                            Msg.messagemWarn("Senhas não conferem");
                        }
                    } else {
                        Msg.messagemWarn("O campo senha é Obrigatório");
                    }
                } else {
                    Msg.messagemWarn("O campo nome é obrigatório");
                }
            } catch (Exception erro) {
            }
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public Curso getCurso() {
        return curso;
    }

    public void setCurso(Curso curso) {
        this.curso = curso;
    }

    public List<Curso> getCursos() {
        return cursos;
    }

    public void setCursos(List<Curso> cursos) {
        this.cursos = cursos;
    }

    public List<Grupo> getGrupoSelecionado() {
        return grupoSelecionado;
    }

    public void setGrupoSelecionado(List<Grupo> grupoSelecionado) {
        this.grupoSelecionado = grupoSelecionado;
    }

    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }

    public Boolean getLogin() {
        return login;
    }

    public void setLogin(Boolean login) {
        this.login = login;
    }
}
